import os

def replace_first_four_chars(folder_path, new_prefix):
    # 检查文件夹是否存在
    if not os.path.isdir(folder_path):
        print(f"错误：文件夹 '{folder_path}' 不存在")
        return
    
    # 检查新前缀长度
    if len(new_prefix) != 4:
        print(f"警告：新前缀长度应为4，当前为{len(new_prefix)}，可能导致非预期结果")

    # 遍历文件夹中的所有文件
    for filename in os.listdir(folder_path):
        # 构建完整路径
        old_path = os.path.join(folder_path, filename)
        
        # 只处理文件，不处理子文件夹
        if os.path.isfile(old_path):
            # 排除以0002开头的文件
            if filename.startswith("0002"):
                print(f"排除: {filename} 以0002开头")
                continue
            # 确保文件名长度至少为4，否则不处理
            if len(filename) >= 4:
                # 替换前4位字符
                new_filename = new_prefix + filename[4:]
                new_path = os.path.join(folder_path, new_filename)
                
                # 避免与已存在文件重名
                if not os.path.exists(new_path):
                    os.rename(old_path, new_path)
                    print(f"已重命名: {filename} -> {new_filename}")
                else:
                    print(f"跳过: {new_filename} 已存在")
            else:
                print(f"跳过: {filename} 文件名长度不足4位")


def find_prefix_in_file(DXcache_filepath):
    
    if not os.path.isdir(DXcache_filepath):
        print(f"错误：文件夹 '{DXcache_filepath}' 不存在")
        return
    
    for filename in os.listdir(DXcache_filepath):
        # 构建完整路径
        file_path = os.path.join(DXcache_filepath, filename)
        # 只处理文件，不处理子文件夹
        if os.path.isfile(file_path):
            # 确保文件名长度至少为4，否则不处理
            if filename.startswith("0002"):
                print(f"排除: {filename} 以0002开头")
                continue

            if len(filename) >= 4 and os.path.getsize(file_path) >= 64 * 1024:  # 确保文件大小大于16MB
                prefix = filename[:4]
                print(f"提取前缀: {prefix} 从文件: {filename}")
                return prefix

# 使用示例
if __name__ == "__main__":
    target_folder = r"F:\N卡着色器"
    appdata_local = os.getenv('LOCALAPPDATA')
    DXcache_filepath = os.path.join(appdata_local, "NVIDIA", "DXCache")
    print(f"DXCache 文件夹路径: {DXcache_filepath}")
    
    new_prefix = find_prefix_in_file(DXcache_filepath)
    print(f"找到的新前缀: {new_prefix}")
    if new_prefix:
        replace_first_four_chars(target_folder, new_prefix)
